home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_19_1987_Transactor_Publishing.d64 / menus v1.0.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  27KB  |  1,000 lines

  1. 10 rem    "mouse driven menus"  v1.0
  2. 11 rem
  3. 12 rem  source file by anthony bryant
  4. 13 rem
  5. 14 rem         august 1986
  6. 15 sys 700
  7. 16 .opt n
  8. 18 ;
  9. 20 ;*** basic rom routines ***
  10. 22 chrget = $0073 ;get new char
  11. 24 chr(NULL)t = $0079 ;get old char
  12. 26 evalfm = $ad9e ;evaluate formula
  13. 28 eatcma = $aefd ;eat ","
  14. 30 syntax = $af08 ;syntax error
  15. 32 illqnt = $b248 ;illegal quantity
  16. 34 frestr = $b6a3 ;free descriptor
  17. 36 facbyt = $b7a1 ;fac to byt in x
  18. 38 getbyt = $b7f1 ;eat "," get byt in x
  19. 40 ;
  20. 42 ;*** memory map ***
  21. 44 progm  = $8000 ;start of program
  22. 46 ;      = $8c00 ;future expansion
  23. 48 mlist  = $8d00 ;menulist (252 bytes)
  24. 50 cmem0  = $8e00 ;color store 1/2scrn
  25. 52 bmap0  = $9000 ;bitmap store 1/2scrn
  26. 54 cmem1  = $cc00 ;'hires' color memory
  27. 56 sptr0  = $cff8 ;sprite 0 pointer
  28. 58 chset  = $d800 ;lowercase rom set
  29. 60 bmap1  = $e000 ;'hires' bitmap
  30. 62 ascii  = $ebc2 ;table keycode/ascii
  31. 64 slot1  = $ff40 ;sprite slot (#253)
  32. 66 ;
  33. 68 ;*** zero page requirement ***
  34. 70 cs = $9b ;current column save
  35. 72 ce = $9c ;current column end
  36. 74 cc = $9e ;current column
  37. 76 rr = $9f ;current row
  38. 78 ; $a3 to $ab - various
  39. 80 lc = $b0 ;left column current menu
  40. 82 tr = $b1 ;top row       "      "
  41. 84 wd = $b2 ;width    of   "      "
  42. 86 dp = $b3 ;depth    of   "      "
  43. 88 hs = $b4 ;temp save header param
  44. 90 hc = $bd ;left column of header
  45. 92 hr = $be ;top row of header/menubar
  46. 94 hw = $bf ;width of header
  47. 96 ht = $c0 ;headerform/text$ or image$
  48. 98 ; $f7 to $fa - pntr to cmem & bmap
  49. 100 ;
  50. 102 ;
  51. 104 *=progm ;start of code
  52. 106 ;
  53. 108 ;
  54. 110 ;menus command and variables
  55. 112 jmp menus   ;menus manager
  56. 114 mnum .byt 0 ;menu number - #mn(1-7)
  57. 116 mcol .byt 1 ;menu color byte fg/bg
  58. 118 mflg .byt 0 ;menubar on/off  flag
  59. 120 mitm .byt 0 ;menu item   - #mi(0-8)
  60. 122 mtyp .byt 0 ; " item type  #mt(0-2)
  61. 124 mlix .byt 0 ;menu [155] index
  62. 126 ;mouse comm[175] [175] variables
  63. 128 jmp mouse   ;mouse manager[173]driver
  64. 130 mb   .byt 0 ;but[164]n status
  65. 132 mcx  .byt 0 ;cell x[171]co[176]ds
  66. 134 mcy  .byt 0 ;cell y[171]co[176]d
  67. 136 mx   .byt 0 ;pixel x lo
  68. 138      .byt 0 ;pixel x hi
  69. 140 my   .byt 0 ;pixel y
  70. 142 myi  .byt 0 ;pixel 199[171]y
  71. 144 ;
  72. 146 ;
  73. 148 ;[172][172][172] menu [131] structures ***
  74. 150 ;
  75. 152 ;
  76. 154 ; #mn [171][171][171]  0  1  2  3  4  5  6  7
  77. 156 m[164]p .byt  0, 0, 0, 0, 0, 0, 0, 0
  78. 158 mnlc .byt  0, 0, 0, 0, 0, 0, 0, 0
  79. 160 mntr .byt  0, 1, 1, 1, 1, 1, 1, 1
  80. 162 mnwd .byt 40, 0, 0, 0, 0, 0, 0, 0
  81. 164 mndp .byt  1, 0, 0, 0, 0, 0, 0, 0
  82. 166 m[134] .byt 00,00,00,00,00,00,00,00
  83. 168 mchk .byt 00,00,00,00,00,00,00,00
  84. 170 ;
  85. 172 ; #mi [171][171][171]  1, 2, 3, 4, 5, 6, 7 ,8
  86. 174 mrow .byt  0, 0, 0, 0, 0, 0, 0, 0
  87. 176 ;
  88. 178 mask .byt $80,$40,$20,$10,8,4,2,1
  89. 180 ;
  90. 182 cset .w[176]d chset
  91. 184 char .byt  0 ;current char
  92. 186 rvse .byt  0 ;rvs [145] flag
  93. 188 [134]f .byt  0 ;[134] [145] flag
  94. 190 imgf .byt  0 ;image$[173]text$ flag
  95. 192 ;
  96. 194 ;
  97. 196 ;[172][172][172] menu manager [172][172][172]
  98. 198 ;
  99. 200 ;
  100. 202 ;[158] menus,mn, 0,mt,name$[,xr]
  101. 204 ;[171] where  xr[178]  0 [176] oc [129] text$
  102. 206 ; (mi[178]0)  xr[178]128 [176] oc [129] image$[171]1
  103. 208 ;         xr[178]192 [176] oc [129] image$[171]2
  104. 210 ;
  105. 212 ;[158] menus,mn,mi,mt,item$[,xr]
  106. 214 ;[171] where  xr[178]  0 [176] kc [129] text$
  107. 216 ; (mi[179][177]0) xr[178]128 [176] kc [129] image$[171]1
  108. 218 ;         xr[178]192 [176] oc [129] image$[171]2
  109. 220 ;
  110. 222 ;[158] menus,mn,mi,mt [171][171] (change type)
  111. 224 ;[158] menus [145] [,bg,fg](show menubar)
  112. 226 ;[158] menus [off] .....(hide menubar)
  113. 228 ;[158] menus [156][,bg,fg] (clear [155]s)
  114. 230 ;
  115. 232 menus [178] [172]    ;check [129] [164]kens
  116. 234  jsr chr[203]t:beq menuoff
  117. 236  cmp #","  :beq menupar
  118. 238  pha:jsr menucol:pla ;optn col[176]s
  119. 240  cmp #$9c  :beq menu[156]
  120. 242  cmp #$91  :beq menu[145]
  121. 244  jmp syntax  ;err[176]
  122. 246 menupar [178] [172]  ;[161] ,#mn,#mi,#mt
  123. 248  jsr [161]byt:txa:beq ill
  124. 250  cpx #8:bcs ill:stx mnum ;#mn(1[171]7)
  125. 252  jsr [161]byt
  126. 254  cpx #9:bcs ill:stx mitm ;#mi(0[171]8)
  127. 256  jsr [161]byt
  128. 258  cpx #3:bcs ill:stx mtyp ;#mt(0[171]2)
  129. 260  jsr settype ;in menu [131] area
  130. 262  jsr chr[203]t:bne [172][170]3:rts
  131. 264 ;[161] name$ [176] item$ [181]o menu[155]
  132. 266  jsr eatcma  ;eat ","
  133. 268  jsr e[197]fm  ;e[197] string
  134. 270  jsr [184]str  ;[161] descrip[164]r
  135. 272  jsr set[155] ;[181]o menu[155]
  136. 274  jsr chr[203]t:bne [172][170]3:rts
  137. 276 ;[161] xr [[176] oc] [[176] kc] coded byte
  138. 278  jsr [161]byt:txa
  139. 280  jmp setlast ;[181]o menu[155]
  140. 282 ;
  141. 284 ill jmp illqnt ;illegal quantity
  142. 286 ;
  143. 288 menu[156] [178] [172]  ;clear all menu [155]s
  144. 290  ldx #0:txa:sta m[164]p,x
  145. 292  inx:cpx #8:bcc [172][171]6:sta mlix
  146. 294  tax:sta m[155],x
  147. 296  inx:bne [172][171]4 ;[175] do a menuoff
  148. 298 menuoff [178] [172]  ;hide menubar
  149. 300  lda mflg:beq menust
  150. 302  jsr mnull:sty mitm
  151. 304  jsr closwndw ;[160] window
  152. 306  lda #0:beq menust
  153. 308 menu[145]  [178] [172]  ;show menubar
  154. 310  lda mflg:bne menust ;al[135]y [145]!
  155. 312  jsr [162]bp   ;reset bptr
  156. 314  lda m[164]p:beq menust ;no menus!
  157. 316  jsr menusiz ;size menubar
  158. 318  jsr [159]wndw ;[159] window
  159. 320  jsr menubar ;display headers
  160. 322  lda #[171]1     ;flag [171] [145]
  161. 324 menust sta mflg:rts
  162. 326 ;
  163. 328 menucol [178] [172]  ;eat [164]ken [,bg,fg]
  164. 330  jsr chr[161]:bne [172][170]3:rts
  165. 332  jsr [161]byt:txa:[175] #$0f:sta mcol
  166. 334  jsr [161]byt:txa:asl:asl:asl:asl
  167. 336  [176]a mcol:sta mcol:rts
  168. 338 ;
  169. 340 ;menu types  1 bit[178]1 item
  170. 342 ;[131] struct 1 byt=1 menu (8 items)
  171. 344 ;
  172. 346 settype [178] [172]  ;set menu type
  173. 348  ldy mnum    ;#mn(1[171]7) current menu
  174. 350  ldx mitm    ;#mi(0[171]8) current item
  175. 352  bne [172][170]7     ;[139] #mi[178]0 [167] use
  176. 354  ldy #0:ldx mnum ; #mn[178]0 bits
  177. 356 [156]m[134] [178] [172]  ;type is [168] disabled
  178. 358  lda mask[171]1,x:e[176] #$ff
  179. 360  [175] m[134],y  ;clear bit #mi
  180. 362  sta m[134],y
  181. 364 [156]mchk [178] [172]  ;type is [168] marked
  182. 366  lda mask[171]1,x:e[176] #$ff
  183. 368  [175] mchk,y  ;clear bit #mi
  184. 370  sta mchk,y
  185. 372  lda mtyp    ;#mt(0[171]2) current type
  186. 374  cmp #0:beq setm[134]
  187. 376  cmp #2:beq setmchk
  188. 378  rts         ;else #mt[178]1
  189. 380 ;
  190. 382 setm[134] [178] [172]  ;type is disabled
  191. 384  lda m[134],y  ;[134] bits
  192. 386  [176]a mask[171]1,x ;set bit #mi
  193. 388  sta m[134],y:rts
  194. 390 ;
  195. 392 setmchk [178] [172]  ;type is marked
  196. 394  lda mchk,y  ;check bits
  197. 396  [176]a mask[171]1,x ;set bit #mi
  198. 398  sta mchk,y:rts
  199. 400 ;
  200. 402 [161]type [178] [172]  ;check menu types
  201. 404  ldy mnum    ;#mn(1[171]7) current menu
  202. 406  ldx mitm    ;#mi(0[171]8) current item
  203. 408  bne [161]m[134]
  204. 410  ldy #0:ldx mnum ;[139] #mi[178]0
  205. 412 [161]m[134] [178] [172]  ;check [139] disabled
  206. 414  lda m[134],y  ;item flags
  207. 416  [175] mask[171]1,x
  208. 418  sta [134]f    ;0[178]off
  209. 420 [161]mchk [178] [172]  ;check [139] marked
  210. 422  lda mchk,y  ;item flags
  211. 424  [175] mask[171]1,x
  212. 426  rts         ;0[178]off
  213. 428 ;
  214. 430 setrow [178] [172]   ;set menu row per item
  215. 432  ldx mitm:sta mrow[171]1,x:rts
  216. 434 [161]row [178] [172]   ;[161] menu row per item
  217. 436  ldx mitm:ldy mrow[171]1,x:rts
  218. 438 ;
  219. 440 ;
  220. 442 ;menu[155] [171] a table of po[181]ers
  221. 444 ;[164] text$ [176] image$ descrip[164]rs
  222. 446 ; 4 bytes per name$ [176] item$
  223. 448 ; index [171]  mlix[178](mn[171]1)[172]36[170]mi[172]4
  224. 450 ;
  225. 452 mlx [178] [172]  ;[161] index [181]o menu[155]
  226. 454  lda mnum:sec:sbc #1 ;(mn[171]1)
  227. 456  asl:asl:sta $a3 ;[172]4
  228. 458  asl:adc $a3:sta $a3 ;[172]12
  229. 460  asl:adc $a3:sta $a3 ;[172]36
  230. 462  lda mitm:asl:asl ;[172]4
  231. 464  adc $a3:tay:rts
  232. 466 ;
  233. 468 set[155] [178] [172]  ;descrip[164]r in $22[173]23
  234. 470  tax ;[195]gth of string
  235. 472  jsr mlx:txa:sta m[155],y ;ml[171]x
  236. 474  iny:lda $22:sta m[155],y ;ml[171]l
  237. 476  iny:lda $23:sta m[155],y ;ml[171]h
  238. 478  iny:sty mlix ;update index
  239. 480  lda #0:jsr setlast ;[150]ault
  240. 482 setm[164]p [178] [172]  ;update maximums menus
  241. 484  ldx mnum:cpx m[164]p:bcc [172][170]5
  242. 486  stx m[164]p    ;update maximum #mn
  243. 488  lda mitm:cmp m[164]p,x:bcc [172][170]5
  244. 490  sta m[164]p,x  ;update maximum #mi
  245. 492  rts
  246. 494 ;
  247. 496 setlast  [178] [172] ;add xr [164] menu[155]
  248. 498  ldy mlix:sta m[155],y:rts ;ml[171]xr
  249. 500 ;
  250. 502 [161][155] [178] [172]  ;descrip[164]r [164] $a3[173]a4
  251. 504  jsr mlx:ldx m[155],y     ;ml[171]x
  252. 506  iny:lda m[155],y:sta $a3 ;ml[171]l
  253. 508  iny:lda m[155],y:sta $a4 ;ml[171]h
  254. 510  iny:lda m[155],y:sta $a5 ;ml[171]xr
  255. 512  sty mlix    ;[148] .y index
  256. 514  txa:bit $a5 ;string [195]gth in .x
  257. 516 [161][195] [178] [172]   ;  cell [195]gth in .x
  258. 518  bpl [172][170]8     ;[139] text$
  259. 520  bvc [172][170]3:lsr ;[139] image$[171]1
  260. 522  lsr:lsr:lsr ;[173]8 [176] [173]16
  261. 524  tax:lda $a5:bit $a5:rts
  262. 526 ;
  263. 528 ;
  264. 530 ;[172][172][172] menu routines [172][172][172]
  265. 532 ;
  266. 534 ;
  267. 536 menusiz [178] [172]  ;size pro[185]ed menubar
  268. 538  lda #1:sta mndp       ;1 row
  269. 540  ldy #0:sty mitm:iny
  270. 542 msiz2 sty mnum
  271. 544  cpy m[164]p:beq [172][170]4:bcs mnull
  272. 546  jsr [161][155]:bvs msiz3 ;check [129]m
  273. 548  ldy mnum:iny:bne msiz2
  274. 550 msiz3 lda #2:sta mndp  ;2 rows
  275. 552 mnull ldy #0:sty mnum:rts
  276. 554 ;
  277. 556 menubar [178] [172]  ;display menu bar
  278. 558  ldx mnlc:stx hc
  279. 560  ldy mntr:sty hr:jsr scrsr
  280. 562  ldy #0:sty mitm:iny
  281. 564 mbar2 sty mnum
  282. 566  cpy m[164]p:beq [172][170]4:bcs mnull
  283. 568  lda m[164]p,y:bne [172][170]8
  284. 570  sta mtyp:jsr settype ;no items!
  285. 572  jsr lcase   ;lowercase [150]ault
  286. 574  jsr [161]type ;set [134]f [145]ly
  287. 576 jsr [161][155] ;menu[155] params
  288. 578  [175] #$3f:beq mbar3 ;[161] offset oc
  289. 580  clc:adc hc:tax ;[185]iti[145] [164] oc
  290. 582  ldy hr:jsr scrsr ;set curs[176]
  291. 584 mbar3 jsr [161][155] ;menu[155] params
  292. 586  [176]a cc:jsr setlast ;set oc in xr
  293. 588  bit $a5 ;check [129]m
  294. 590  jsr plt[129]m  ;text$ [176] image$
  295. 592 mbar4 ldy mnum:iny:bne mbar2
  296. 594 ;
  297. 596 menusel [178] [172]  ;select from menubar
  298. 598  lda mflg:beq msel4  ;no menubar!
  299. 600  lda m[164]p:beq msel4  ;no menus!
  300. 602  ldy mntr:sty hr ;set header row
  301. 604  jsr mcmxy   ;mouse [185]n (mcx,mcy)
  302. 606  iny:lda mndp ;within menubar"?
  303. 608  dey:cpy hr:beq *+7    ;yes!
  304. 610  lsr:bcc *-6:bcs msel4 ;no, exit
  305. 612  ldy #0:sty mitm:iny
  306. 614 msel2 sty mnum ;scan each menu name
  307. 616  cpy mtop:beq *+4:bcs msel4
  308. 618  jsr getlist:sta ht ;form state
  309. 620  and #$3f:sta hc ;cc offset
  310. 622  cmp mcx:beq *+4:bcs msel4
  311. 624  txa:clc:adc hc  ;within header"?
  312. 626  cmp mcx:beq [172][170]4:bcs msel3 ;found!
  313. 628  ldy mnum:iny:bne msel2 ;[130] menu
  314. 630 msel3 stx hs ;[148] header width
  315. 632  jsr [161]type:lda [134]f:bne msel4
  316. 634  lda hs ;[195]gth in .a [129] hilite
  317. 636  ldx hc:ldy hr:bit ht ;[129]m state
  318. 638  jsr hlit[129]m ;hlit text$ [176] image$
  319. 640  clc:rts ;[142] with #mn hilited
  320. 642 msel4 jsr mnull ;#mn[178]0
  321. 644  sec:rts ;[139] c[178]1 no select!
  322. 646 ;
  323. 648 menubox [178] [172]  ;size up menu box
  324. 650  lda hr:clc:adc mndp:sta tr ;[164]prow
  325. 652  lda hc ;try [164] align at left edge
  326. 654 mbox2 sta lc:ldy #0
  327. 656  sty wd:sty dp:sty $a6 ;past oc
  328. 658  ldx #1:stx mitm
  329. 660 mbox3 jsr [161][155]:bvs mbox4
  330. 662  [175] #$3f:beq [172][170]4:inx:inx
  331. 664  ldy #0:sty $a6:beq mbox5 ;[139] 1 row
  332. 666 mbox4 [175] #$3f:cmp $a6   ;[139] 2 rows
  333. 668  beq [172][170]4:bcs [172][170]6:ldy #0:sty $a6
  334. 670  ldy $a6:sta $a6 ;update past oc
  335. 672  txa:sec:adc $a6:tax ;size width
  336. 674  cpy #0:bne [172][170]6:inc dp ;size depth
  337. 676 mbox5 inc dp ;size depth
  338. 678  cpx wd:bcc [172][170]4:stx wd ;size width
  339. 680 mbox6 inc mitm:ldy mnum
  340. 682  lda mitm:cmp m[164]p,y
  341. 684  bcc mbox3:beq mbox3 ;[130] item
  342. 686  lda lc:clc:adc wd ;check max width
  343. 688  cmp #39:bcc mbox7:beq mbox7
  344. 690  sbc #39:e[176] #[171]1:adc hc ;adjust
  345. 692  jmp mbox2 ;try lc[178]hc[171](lc[170]wd[171]39)
  346. 694 mbox7 lda lc:sta mnlc,y
  347. 696  lda wd:sta mnwd,y ;s[164]re the
  348. 698  lda tr:sta mntr,y ;viewp[176]t params
  349. 700  lda dp:cmp #21:bcc [172][170]4
  350. 702  lda #21:sta mndp,y:rts
  351. 704 ;
  352. 706 menudown [178] [172] ;find menu & display
  353. 708  jsr menubox ;size menu box
  354. 710  jsr [159]wndw ;[159] window
  355. 712  jsr vb[176]der ;b[176]der viewp[176]t
  356. 714 menuplt [178] [172]  ;plot menu
  357. 716  ldy tr:sty rr ;[164]p row is start
  358. 718  ldx #1:stx mitm:ldy #0:sty $a6
  359. 720 mplt2 jsr lcase ;lowercase [150]ault
  360. 722  jsr [161][155]:bvc mplt3;[168] image$[171]2
  361. 724  [175] #$3f:cmp $a6 ;past oc
  362. 726  beq [172][170]4:bcs [172][170]6:ldy #0:sty $a6
  363. 728  ldy $a6:sta $a6  ;update past oc
  364. 730  clc:adc lc:tax ;add offset column
  365. 732  cpy #0:beq mplt3b
  366. 734  ldy rr:dey:dey:jmp mplt3c
  367. 736 mplt3 ldx lc ;set column
  368. 738 mplt3b ldy rr ;set row
  369. 740 mplt3c jsr scrsr ;set curs[176]
  370. 742  lda rr:jsr setrow ;per item
  371. 744  jsr [161]type:beq [172][170]5 ;set [134]f
  372. 746  jsr pltmark  ;checkmark [139] set
  373. 748  jsr [161][155]  ;menu[155] params
  374. 750  jsr plt[129]m  ;text$ [176] image$
  375. 752  bit $a5:bvs mplt5 ;[139] image$[171]2
  376. 754 mplt4 ldy #0:sty $a6 ;reset past oc
  377. 756  lda $a5:[175] #$3f:beq mplt6
  378. 758  tax:lda [198]ii,x ;alt key sequence
  379. 760  jsr pltaltk ;plot [188]o & key
  380. 762  jmp mplt6
  381. 764 mplt5 jsr ccrsr ;(2 rows)
  382. 766 mplt6 jsr ccrsr ;(1 row)
  383. 768  inc mitm:ldy mnum
  384. 770  lda mitm:cmp m[164]p,y
  385. 772  bcc mplt2:beq mplt2:rts
  386. 774 ;
  387. 776 menukey [178] [172]  ;scan menu[155] [129] key
  388. 778  lda $c5:cmp #64:bne [172][170]3:rts
  389. 780  ldy #1      ;start scan at menu #1
  390. 782 mkey2 sty mnum
  391. 784  cpy m[164]p:beq [172][170]4:bcs mkey7 ;exit
  392. 786  lda m[164]p,y:beq mkey5 ;[130] menu
  393. 788  ldx #0:stx mitm
  394. 790  jsr [161]type:lda [134]f:bne mkey5
  395. 792 mkey3 jsr [161][155]:bvs mkey4
  396. 794  ldx mitm:beq mkey4   ;[130] item
  397. 796  [175] #$3f:cmp $c5:beq mkey6 ;found!
  398. 798 mkey4 inc mitm:ldy mnum
  399. 800  lda mitm:cmp m[164]p,y
  400. 802  bcc mkey3:beq mkey3
  401. 804 mkey5 ldy mnum:iny:bne mkey2
  402. 806 mkey6 dec $c6 ;de[136]e from buffer
  403. 808  jsr [161]type  ;item [134]med"?
  404. 810  lda dimf:bne mkey7 ;yes, exit
  405. 812  rts ;exit with #mn & #mi
  406. 814 mkey7 jsr mnull ;not found
  407. 816  sty mitm:rts   ;or item dimmed
  408. 818 ;
  409. 820 menuaway = *  ;remove menu & header
  410. 822  jsr closwndw ;close window
  411. 824  lda hs:ldx hc:ldy hr:bit ht ;form
  412. 826 hlitform = *  ;choose form & hilite
  413. 828  bpl hlittext ;by exchanging
  414. 830  bvc hlitimg1 ;color nibbles
  415. 832  bvs hlitimg2 ;over length - hw
  416. 834 ;cell length in .a
  417. 836 hlitimg1 = *
  418. 838 hlittext sta hw ;hilite 1 row
  419. 840 hlitword jsr vcposn
  420. 842 hlitwor2 ldy #0
  421. 844 hlitwor3 lda ($f7),y
  422. 846  asl:asl:asl:asl:sta $af
  423. 848  lda ($f7),y:lsr:lsr:lsr:lsr
  424. 850  ora $af:sta ($f7),y
  425. 852  iny:cpy hw:bcc hlitwor3:rts
  426. 854 ;
  427. 856 hlitimg2 sta hw ;hilite 2 rows
  428. 858 hlitarea jsr vcposn ;area x2
  429. 860  ldx #0:jsr hlitwor2
  430. 862  jsr adlnf7:inx:cpx #2:bcc *-9:rts
  431. 864 ;
  432. 866 menuctrl = * ;item selection
  433. 868  jsr rmpos0y ;sprite0 at top row
  434. 870  ldy tr:sty rr ;top row
  435. 872  lda #1:sta mitm ;1st item
  436. 874 mctr2 ldx wd:stx hw ;set width
  437. 876  ldx lc:stx cc ;set column
  438. 878  jsr getrow:sty rr ;set row
  439. 880  jsr getlist:bvc mctr3:stx hw
  440. 882  and #$3f:clc:adc lc:sta cc ;set cc
  441. 884 mctr3 jsr checkbox:bcs mctr6b
  442. 886  jsr rmbtns:beq mexit ;if released
  443. 888  bit $a5:bvc mctr4 ;if not image$-2
  444. 890  cpy rr:beq *+11:bcc mctr9
  445. 892  dey:cpy rr:beq *+4:bcs mctr9
  446. 894  cpx cc:bcc mctr9:txa
  447. 896  sbc cc:cmp hw:bcs mctr9:bcc mctr5
  448. 898 mctr4 cpy rr:bne mctr9
  449. 900 mctr5 jsr highlite ;menu item
  450. 902 mctr6 jsr checkbox ;mouse in box"?
  451. 904 mctr6b bcs mexit ;exit [139] outside
  452. 906  jsr rmbtns:beq flash ;[139] released
  453. 908  bit $a5:bvc mctr7 ;[139] [168] image$[171]2
  454. 910  cpy rr:beq [172][170]11:bcc mctr8
  455. 912  dey:cpy rr:beq [172][170]4:bcs mctr8
  456. 914  cpx cc:bcc mctr8:txa
  457. 916  sbc cc:cmp hw:bcs mctr8:bcc mctr6
  458. 918 mctr7 cpy rr:beq mctr6
  459. 920 mctr8 php:jsr highlite:plp;old item
  460. 922 mctr9 bcs [172][170]10 ;[164] [130] item
  461. 924  dec mitm  ;previous item
  462. 926  lda mitm:bne [172][170]5
  463. 928  inc mitm:jmp mctr2 ;[130] item
  464. 930 ;
  465. 932 mexit ldx #0:stx mitm:stx mb:rts
  466. 934 ;
  467. 936 flash [178] [172] ;[139] item selected
  468. 938  jsr [161]type:lda [134]f:bne mexit
  469. 940 flash8 jsr flash4
  470. 942 flash4 jsr flash2
  471. 944 flash2 jsr flash1
  472. 946 flash1 [178] [172] ;delayed highlite
  473. 948  ldy #48:jsr delay ;48 millisec
  474. 950 highlite [178] [172]  ;([176] unhighlite)
  475. 952  jsr [161]type:lda [134]f:beq [172][170]3:rts
  476. 954  lda hw:ldx cc:ldy rr:bit $a5
  477. 956  jmp hlit[129]m ;hlit text$ [176] image$
  478. 958 ;
  479. 960 delay [178] [172] ;.y [178] millisec  delay
  480. 962  ldx #$b8:dex:bne [172][171]1
  481. 964  dey:bne [172][171]6:rts
  482. 966 ;
  483. 968 checkbox [178] [172] ;check mouse co[176]ds
  484. 970  ldy #16:jsr delay ;16 millisec
  485. 972  jsr rdmouse ;mouse co[176]ds
  486. 974  jsr mcmxy ;colm & row co[176]ds
  487. 976  cpx lc:bcc limit:txa ;outside box
  488. 978  sbc lc:cmp wd:bcs limit
  489. 980  cpy tr:bcc limit:tya
  490. 982  sbc tr:cmp dp:bcs limit
  491. 984  clc:rts ; ok! within menubox
  492. 986 limit sec:rts ;outside menubox
  493. 988 ;
  494. 990 ;
  495. 992 ;
  496. 994 ;[172][172][172] window routines [172][172][172]
  497. 996 ;
  498. 998 ;
  499. 1000 [159]wndw [178] [172] ;[159] window
  500. 1002  jsr viewp[176]t ;[150]ine viewp[176]t
  501. 1004  jsr vwipe   ;clear bitmap bmap0
  502. 1006  jsr vcocmem ;col[176] cmem0 area
  503. 1008  jsr savbp   ;[148] buffer pntr
  504. 1010  jsr vswcmem ;swap col[176] mem[176]y
  505. 1012  jsr vxfer   ;swap bitmap out
  506. 1014  jmp setbp   ;advance buffer pntr
  507. 1016 ;
  508. 1018 closwndw [178] [172] ;[160] window
  509. 1020  jsr viewp[176]t ;[150]ine viewp[176]t
  510. 1022  jsr lodbp   ;put back bptr
  511. 1024  jsr vxfer   ;swap bitmap bmap0
  512. 1026  jmp vswcmem ;swap cmem0 cmem
  513. 1028 ;
  514. 1030 ;window [148] area buffer
  515. 1032 ;po[181]er "bptr" po[181]s [164]
  516. 1034 ;bitmap [148] area [171] bmap0
  517. 1036 bptr .w[176]d 0
  518. 1038 bplo .byte 00,00
  519. 1040 bphi .byte 00,00
  520. 1042 ;
  521. 1044 [161]bp [178] [172] ;[161] "bptr"
  522. 1046  lda bptr:ldx bptr[170]1
  523. 1048  sta $a7:stx $a8:rts
  524. 1050 savbp jsr [161]bp ;[148] "bptr"
  525. 1052  ldy mnum:beq [172][170]4:ldy #1
  526. 1054  sta bplo,y:txa:sta bphi,y:rts
  527. 1056 lodbp [178] [172] ;[147] [148]d "bptr"
  528. 1058  ldy mnum:beq [172][170]4:ldy #1
  529. 1060  lda bplo,y:ldx bphi,y:bne putbp
  530. 1062 setbp [178] [172] ;set "bptr"
  531. 1064  lda $a7:ldx $a8:bne putbp
  532. 1066 [162]bp [178] [172] ;init "bptr"
  533. 1068  lda #[179]bmap0:ldx #[177]bmap0
  534. 1070 putbp sta bptr:stx bptr[170]1:rts
  535. 1072 ;
  536. 1074 [161]cbp [178] [172] ;compute "cmem bptr"
  537. 1076  lda bptr[170]1:sec:sbc #[177]bmap0
  538. 1078  sta $fa:lda bptr:lsr $fa:r[176] ;[173]8
  539. 1080  lsr $fa:r[176]:lsr $fa:r[176]:sta $f9
  540. 1082  clc:lda $fa:adc #[177]cmem0:sta $fa
  541. 1084  rts
  542. 1086 ;
  543. 1088 ;
  544. 1090 ;[172][172][172] viewp[176]t routines [172][172][172]
  545. 1092 ;
  546. 1094 ;byte[171]aligned viewp[176]ts
  547. 1096 vpx .w[176]d 0 ;pixel byte address
  548. 1098 ;
  549. 1100 viewp[176]t [178] [172] ;viewp[176]t params
  550. 1102  ldy mnum   ;menu number
  551. 1104  lda mnlc,y :sta lc ;left c[176]ner
  552. 1106  lda mntr,y :sta tr ;[164]p row
  553. 1108  lda mnwd,y :sta wd ;width
  554. 1110  lda mndp,y :sta dp ;depth
  555. 1112 ;set up co[176]dinate pixel address
  556. 1114  clc:lda lc:adc wd:sta ce ;col [128]
  557. 1116  jsr hcrsr:ldx $f9  ;home curs[176]
  558. 1118  stx vpx:sta vpx[170]1:rts
  559. 1120 ;
  560. 1122 vaddr [178] [172] ;[164]p left c[176]ner byte
  561. 1124  lda vpx:ldx vpx[170]1
  562. 1126  sta $a7:stx $a8
  563. 1128 vram [178] [172] ;disable [181]errupts & rom
  564. 1130  pha:lda #$7f:sta $dc0d
  565. 1132  lda #$34:sta $01:pla:rts
  566. 1134 ;
  567. 1136 ;[185]i[164]n col[176] mem po[181]ers
  568. 1138 ;  f7[173]f8  pntr [164] cmem1  area
  569. 1140 vchome ldx lc:ldy tr ;home
  570. 1142 vc[185]n lda #0   ;set [185]iti[145]
  571. 1144  sta $f7:sta $f8:tya:beq [172][170]8
  572. 1146  jsr adlnf7:dey:bne [172][171]4
  573. 1148  txa:clc:adc $f7:sta $f7:tax
  574. 1150  lda #0:adc $f8:pha
  575. 1152  adc #[177]cmem1:sta $f8:pla:rts
  576. 1154 ;
  577. 1156 adlnf7 clc ;advance [145]e cmem line
  578. 1158  lda $f7:adc #40:sta $f7
  579. 1160  bcc [172][170]4:inc $f8:rts
  580. 1162 ;
  581. 1164 ;cmem0 area [129] colr mem [148]s
  582. 1166 ;  f9[173]fa pntr [164] cmem0 area
  583. 1168 vcocmem lda mcol:.byt $2c
  584. 1170 vswcmem lda #0:sta $a3:jsr vram
  585. 1172  jsr vchome:jsr [161]cbp:ldx #0
  586. 1174  ldy #0:lda $a3:bne [172][170]10
  587. 1176  lda ($f7),y:pha:lda ($f9),y
  588. 1178  sta ($f7),y:pla:sta ($f9),y
  589. 1180  iny:cpy wd:bcc [172][171]17
  590. 1182  tya:clc:adc $f9:sta $f9
  591. 1184  bcc [172][170]4:inc $fa:jsr adlnf7
  592. 1186  inx:cpx dp:bcc [172][171]37:jmp vrom
  593. 1188 ;
  594. 1190 adlna7 clc ;advance [145]e bmap line
  595. 1192  lda $ab:adc #[179]320:sta $a7
  596. 1194  lda $ac:adc #[177]320:sta $a8
  597. 1196 adlna9 clc ;advance [145]e bmap line
  598. 1198  lda $ad:adc #[179]320:sta $a9
  599. 1200  lda $ae:adc #[177]320:sta $aa:rts
  600. 1202 ;
  601. 1204 vwipe [178] [172] ;clear hires buffer area
  602. 1206  lda #0:.byt $2c
  603. 1208 vxfer [178] [172] ;xfer viewp[176]t bitmap
  604. 1210  lda #1:sta $a4 ;xfer flag
  605. 1212  jsr vaddr:sta $a9:stx $aa
  606. 1214  jsr [161]bp:ldy #0
  607. 1216  jsr vrow:jsr adlna9
  608. 1218  ldy $af:iny:cpy dp:bcc [172][171]11
  609. 1220 vrom [178] [172] ;enable [181]errupts & rom
  610. 1222  lda #$37:sta $01
  611. 1224  lda #$81:sta $dc0d:rts
  612. 1226 ;
  613. 1228 ;subroutine [129] vwipe[173]vxfer
  614. 1230 vrow sty $af:ldx #0 ;do [145]e row
  615. 1232  lda $a7:sta $ab:lda $a8:sta $ac
  616. 1234  lda $a9:sta $ad:lda $aa:sta $ae
  617. 1236 vro2 ldy #0
  618. 1238 vro3 lda $a4 ;flag[178]0 [129] vwipe
  619. 1240  beq vro4    ;flag[178]1 [129] vxfer
  620. 1242  lda ($a9),y:pha
  621. 1244  lda ($a7),y:sta ($a9),y:pla
  622. 1246 vro4 sta ($a7),y
  623. 1248  iny:cpy #8:bne vro3
  624. 1250  tya:clc:adc $a7:sta $a7
  625. 1252  bcc [172][170]4:inc $a8
  626. 1254  tya:clc:adc $a9:sta $a9
  627. 1256  bcc [172][170]4:inc $aa
  628. 1258  inx:cpx wd:bcc vro2:rts
  629. 1260 ;
  630. 1262 vb[176]der [178] [172] ;b[176]der viewp[176]t
  631. 1264  jsr vaddr:ldx #0
  632. 1266 vblft lda #%10000000:ldy #7
  633. 1268  sta ($a7),y:dey:bpl [172][171]3
  634. 1270  inx:cpx dp:bcs vbbot
  635. 1272  lda $a7:adc #[179]320:sta $a7
  636. 1274  lda $a8:adc #[177]320:sta $a8
  637. 1276  bne vblft
  638. 1278 vbbot ldx #0:ldy #7
  639. 1280  jsr vblin ;bot[164]m line
  640. 1282 vbrht ldx #0:dey
  641. 1284  lda #%00000001
  642. 1286  sta ($a7),y:dey:bpl [172][171]3
  643. 1288  inx:cpx dp:bcs vb[128]:sec
  644. 1290  lda $a7:sbc #[179]320:sta $a7
  645. 1292  lda $a8:sbc #[177]320:sta $a8
  646. 1294  ldy #7:bne vbrht[170]3
  647. 1296 vb[128] jmp vrom
  648. 1298 ;
  649. 1300 vb[164]p [178] [172]  ;[164]p line of viewp[176]t
  650. 1302  jsr vaddr:ldx #0:ldy #0
  651. 1304 vblin lda #%11111111
  652. 1306  sta ($a7),y:inx:cpx wd:bcs [172][170]14
  653. 1308  lda $a7:adc #8:sta $a7
  654. 1310  bcc [172][170]4:inc $a8:bne vblin
  655. 1312  rts
  656. 1314 ;
  657. 1316 ;
  658. 1318 ;[172][172][172] plotting routines [172][172][172]
  659. 1320 ;
  660. 1322 ;3 [129]ms of objects
  661. 1324 plt[129]m  [178] [172] ;choose [129]m & plot
  662. 1326  bpl plttext ;with au[164][171]advance
  663. 1328  bvc pltimg1 ;of curs[176] pntrs
  664. 1330  bvs pltimg2 ;[175] bitmap pntrs
  665. 1332 ;cell [195]gth in .x
  666. 1334 plttext [178] [172]  ;do text$
  667. 1336  inx:ldy #0:sty imgf ;set flag
  668. 1338  dex:beq [172][170]10
  669. 1340  lda ($a3),y:jsr dochar
  670. 1342  iny:bne [172][171]9:rts
  671. 1344 ;
  672. 1346 pltimg1 [178] [172]  ;do image$[171]1 ( 1 row)
  673. 1348  inx ;cell [195]gth in .x
  674. 1350 pltimga ldy #$80:sty imgf
  675. 1352  lda $a3:ldy $a4  ;l[173]h desc
  676. 1354  sta $a9:sty $aa  ;put pntr
  677. 1356 pltimgb dex:bne [172][170]3:rts
  678. 1358  jsr dochar
  679. 1360  clc:lda $a9:adc #8:sta $a9
  680. 1362  bcc [172][170]4:inc $aa:jmp pltimgb
  681. 1364 ;
  682. 1366 pltimg2 [178] [172]  ;do image$[171]2 (2 rows)
  683. 1368  lda cc:sta cs ;[148] current colm
  684. 1370  txa:pha ;cell [195]gth in .x
  685. 1372  inx:jsr pltimga       ;do 1st row
  686. 1374  ldx cc:ldy rr:lda cs
  687. 1376  stx cs:tax:iny:jsr scrsr
  688. 1378  pla:tax:inx:jsr pltimgb ; 2nd row
  689. 1380  ldx cs:ldy rr:dey:jmp scrsr
  690. 1382 ;
  691. 1384 pltmark [178] [172]  ;do checkmark "sqr"
  692. 1386  bit $a5:bvs [172][170]8 ;[139] image$[171]2
  693. 1388  jsr putchk:jmp lcrsr
  694. 1390  jsr lcrsr :jmp putchk
  695. 1392 ;
  696. 1394 pltaltk [178] [172]  ;do [188]o & alt key
  697. 1396  sta char:jsr ecrsr ;edge right
  698. 1398  jsr putcom ;com[171][188]o
  699. 1400  jsr lcase:ldy #0:sty imgf
  700. 1402  lda char ;do key
  701. 1404 dochar [178] [172]  ;plot a cell
  702. 1406  sta char:txa:pha:tya:pha
  703. 1408  jsr exchar
  704. 1410  pla:tay:pla:tax:rts
  705. 1412 ;
  706. 1414 exchar [178] [172]  ;text$ [176] image$
  707. 1416  lda imgf:bne [153] ;[139] image$
  708. 1418  lda char:bmi hichr ;filter text$
  709. 1420 lochr cmp #$20:bcc loch2:cmp #$60
  710. 1422  bcc [172][170]6:[175] #$df:bne [172][170]4:[175] #$3f
  711. 1424 prchr ldx rvse:beq [172][170]4:[176]a #$80
  712. 1426  ldx #0:stx $aa ;[161] chset offset
  713. 1428  asl:rol $aa:asl:rol $aa
  714. 1430  asl:rol $aa:clc:adc cset:tax
  715. 1432  lda $aa:adc cset[170]1:tay
  716. 1434  stx $a9:sty $aa
  717. 1436 [153] jmp putbyts
  718. 1438 loch2 cmp #$0e:bne rvchr
  719. 1440 lcase lda cset[170]1:[176]a #8:bne pcase
  720. 1442 rvchr cmp #$12:beq prvse:rts
  721. 1444 hichr [175] #$7f:cmp #$7f:bne [172][170]4
  722. 1446  lda #$5e:cmp #$20:bcc hich2
  723. 1448  [176]a #$40:bne prchr
  724. 1450 hich2 cmp #$0e:bne ofchr
  725. 1452 ucase lda cset[170]1:[175] #$f0
  726. 1454 pcase sta cset[170]1:rts
  727. 1456 ofchr cmp #$12:bne [172][170]7:lda #0
  728. 1458 prvse sta rvse:rts
  729. 1460 ;
  730. 1462 ccrsr ldx lc:ldy rr:iny ;[179]cr[173]lf[177]
  731. 1464 scrsr stx cc:sty rr ;set curs[176]
  732. 1466  jsr vc[185]n:sta $fa:stx $f9
  733. 1468  asl $f9:rol:asl $f9:rol:asl $f9
  734. 1470  rol:clc:adc #[177]bmap1:sta $fa:rts
  735. 1472 ;
  736. 1474 hcrsr ldx lc:ldy tr:jmp scrsr
  737. 1476 ecrsr ldx ce:dex:dex ;edge right
  738. 1478  ldy rr:jmp scrsr ;set curs[176]
  739. 1480 ;
  740. 1482 ;special 8x8 cell graphics
  741. 1484 chk [178] [172] ;checkmark
  742. 1486 .byt %00000000
  743. 1488 .byt %00000001
  744. 1490 .byt %00000010
  745. 1492 .byt %00000100
  746. 1494 .byt %00101000
  747. 1496 .byt %00010000
  748. 1498 .byt %00000000
  749. 1500 .byt %00000000
  750. 1502 com [178] [172] ;commod[176]e key [188]o
  751. 1504 .byt %00111000
  752. 1506 .byt %01000110
  753. 1508 .byt %10110100
  754. 1510 .byt %10111000
  755. 1512 .byt %10110100
  756. 1514 .byt %01000110
  757. 1516 .byt %00111000
  758. 1518 .byt %00000000
  759. 1520 [134] [178] [172] ;[134] bits mask
  760. 1522 .byt %10101010
  761. 1524 .byt %01010101
  762. 1526 .byt %10101010
  763. 1528 .byt %01010101
  764. 1530 .byt %10101010
  765. 1532 .byt %01010101
  766. 1534 .byt %10101010
  767. 1536 .byt %01010101
  768. 1538 spc [178] [172] ;cell w[176]k space
  769. 1540 [172][178][172][170]8   ;8 bytes
  770. 1542 ;
  771. 1544 putchk [178] [172] ;put checkmark bytes
  772. 1546  ldx #[179]chk:ldy #[177]chk:bne putptrs
  773. 1548 putcom [178] [172] ;put com[171][188]o bytes
  774. 1550  ldx #[179]com:ldy #[177]com
  775. 1552 putptrs stx $a9:sty $aa
  776. 1554 putbyts [178] [172] ;8 bytes per cell
  777. 1556  lda $dc0e:[175] #[171]2:sta $dc0e
  778. 1558  lda #$31:sta $01
  779. 1560  ldy #7:lda ($a9),y
  780. 1562  sta spc,y:dey:bpl [172][171]6
  781. 1564  lda [134]f:beq chkbits
  782. 1566 [134]bits ldy #7:lda spc,y
  783. 1568  [175] [134],y:sta spc,y
  784. 1570  dey:bpl [172][171]10
  785. 1572 chkbits ldy #7:lda ($f9),y
  786. 1574  [176]a spc,y:sta ($f9),y
  787. 1576  dey:bpl [172][171]8
  788. 1578  lda #$37:sta $01
  789. 1580  lda $dc0e:[176]a #1:sta $dc0e
  790. 1582 rcrsr [178] [172] ;curs[176] right
  791. 1584  ldx cc:inx:cpx ce:bcs [172][170]15:stx cc
  792. 1586  clc:lda $f9:adc #8:sta $f9
  793. 1588  bcc [172][170]4:inc $fa:rts
  794. 1590 lcrsr [178] [172] ;curs[176] left
  795. 1592  ldx cc:dex:cpx lc:bcc [172][170]15:stx cc
  796. 1594  sec:lda $f9:sbc #8:sta $f9
  797. 1596  bcs [172][170]4:dec $fa:rts
  798. 1598 ;
  799. 1600 ;
  800. 1602 ;[172][172][172] mouse manager & driver [172][172][172]
  801. 1604 ;
  802. 1606 ;
  803. 1608 ;[158] mouse,curs[176]$ [171][171](make  curs[176])
  804. 1610 ;[158] mouse,0       [171][171][171](transparent)
  805. 1612 ;[158] mouse,1       [171][171](arrow curs[176])
  806. 1614 ;[158] mouse,2       [171][171](cross curs[176])
  807. 1616 ;[158] mouse [145] [,col[176]] (show mouse)
  808. 1618 ;[158] mouse [off]   [171][171][171][171](hide mouse)
  809. 1620 ;
  810. 1622 mouse [178] [172]   ;check [129] [164]kens
  811. 1624  jsr chr[203]t:beq mouseoff
  812. 1626  cmp #","  :beq mousepar
  813. 1628  pha:jsr mousecol:pla
  814. 1630  cmp #$91  :beq mouse[145]
  815. 1632  jmp syntax ;err[176]
  816. 1634 mousepar jsr eatcma ;eat ","
  817. 1636  jsr e[197]fm ;e[197]uate
  818. 1638  bit $0d:bmi mousestr
  819. 1640 mousenum jsr facbyt ;byt in .x
  820. 1642  cpx #0 :beq settrans ;transparent
  821. 1644  cpx #1 :beq setarrow ;[174][171]arrow
  822. 1646  cpx #2 :beq setcross ;x[171]cross
  823. 1648  jmp illqnt
  824. 1650 setarrow lda #[179]arrow:ldy #[177]arrow
  825. 1652  ldx #39:bne setpntr
  826. 1654 setcross lda #[179]cross:ldy #[177]cross
  827. 1656  ldx #15 ;[195]gth in .x
  828. 1658 setpntr sta $22:sty $23
  829. 1660  bne settrans
  830. 1662 mousestr jsr [184]str ;[161] descript
  831. 1664  tax ;[195]gth in .x
  832. 1666 settrans ldy #63:lda #0 ;clear
  833. 1668  sta slot1,y:dey:bpl [172][171]4 ;out
  834. 1670  ldy #0:inx
  835. 1672  dex:beq mouseptr
  836. 1674  lda ($22),y:sta slot1,y
  837. 1676  iny:cpy #64:bcc [172][171]11
  838. 1678 mouseptr lda #253:sta sptr0:rts
  839. 1680 ;
  840. 1682 mouseoff [178] [172] ;hide mouse
  841. 1684  ldx #[171]2:lda #[179]oldirq:ldy #[177]oldirq
  842. 1686  bne [172][170]8 ;skip over
  843. 1688 mouse[145] [178] [172]  ;show mouse
  844. 1690  ldx #01:lda #[179][162]irq:ldy #[177][162]irq
  845. 1692  sei:sta $0314:sty $0315
  846. 1694  jsr rmsprt0 ;init sprite0
  847. 1696  cli:rts
  848. 1698 ;
  849. 1700 mousecol [178] [172] ;eat [164]ken [,col[176]]
  850. 1702  jsr chr[161]:bne [172][170]3:rts
  851. 1704  jsr [161]byt:txa:[175] #$0f
  852. 1706  jmp rmscol0 ;sprite0 col[176]
  853. 1708 ;
  854. 1710 oldirq [178] $ea31 ;keyscan, etc.
  855. 1712 extirq [178] $ea81 ;[142] from irq
  856. 1714 ;
  857. 1716 [162]irq [178] [172] ;set up mouse driver
  858. 1718  lda #[177]msdirq:pha ;[130] [145] stack
  859. 1720  lda #[179]msdirq:pha
  860. 1722  php:pha:pha:pha ;call dummy [131]
  861. 1724  jmp oldirq
  862. 1726 ;
  863. 1728 ;
  864. 1730 ;[172][172][172] mouse routines [172][172][172]
  865. 1732 ;
  866. 1734 ;
  867. 1736 msdirq [178] [172] ;[162] mouse driver irq
  868. 1738  jsr rdmouse ;[135] mouse (p[176]t 2)
  869. 1740  jsr rmbtns  ;[135] mouse btns
  870. 1742  sta mb:beq msd2 ;no btns
  871. 1744  jsr msevent ;do btns
  872. 1746  jmp extirq  ;exit irq
  873. 1748 msd2 ldy $028e ;check com[171]key
  874. 1750  cpy #2:bne msd3 ;[139] [168] pressed
  875. 1752  ldx $c6:beq msd3 ;skip scan
  876. 1754  jsr menukey ;menu[155] keycodes
  877. 1756 msd3 jmp extirq ;exit
  878. 1758 ;
  879. 1760 msevent [178] [172] ;left & right btns
  880. 1762  bmi select  ;left btn
  881. 1764  nop ;(rts [171] right btn ign[176]ed)
  882. 1766  bpl menubtn ;right btn
  883. 1768 noevent rts
  884. 1770 ;
  885. 1772 select [178] [172]  ;left mouse but[164]n
  886. 1774  rts ;(nop [171] right btn ign[176]ed)
  887. 1776  nop:nop ;future [189]ansi[145]
  888. 1778 ;
  889. 1780 menubtn [178] [172] ;right mouse but[164]n
  890. 1782  jsr menusel:bcs noevent
  891. 1784  jsr menudown ;layout menu items
  892. 1786  jsr menuctrl ;select item
  893. 1788  jmp menuaway ;erase menu items
  894. 1790 ;
  895. 1792 mcmxy [178] [172] ;mouse cell column & row
  896. 1794  lda mx[170]1:lsr ;xhi set carry
  897. 1796  lda mx:r[176]:lsr:lsr ;[173]8 with carry
  898. 1798  tax:stx mcx
  899. 1800  lda my:lsr:lsr:lsr ;[173]8
  900. 1802  tay:sty mcy:rts
  901. 1804 ;
  902. 1806 ;
  903. 1808 ;[172][172][172] sprite0 routines [172][172][172]
  904. 1810 ;
  905. 1812 ;
  906. 1814 rdmouse [178] [172] ;[135] mouse [185]iti[145]
  907. 1816  lda #$c0:sta $dc02 ;ctrl p[176]t 2
  908. 1818  lda #$80:sta $dc00
  909. 1820  ldx #0:inx:bne [172][171]1 ;settle lines
  910. 1822  ldx $d419          ;[135] potx
  911. 1824  lda $dc00:pha      ;[135] p[176]t
  912. 1826  [175] #$10:sta mb    ;[148] left btn
  913. 1828  txa:bmi [172][170]5        ;right btn
  914. 1830  lda #$20:.byt $2c  ;[188]ic high
  915. 1832  lda #$00:[176]a mb:lsr;[188]ic low
  916. 1834  lsr:e[176] #[171]1:sta mb ;[148] l&r btns
  917. 1836  pla:[175] #$0f   ;filter directi[145]s
  918. 1838  ldx #$ff:stx $dc02 ;reset ddr
  919. 1840  ldx #$7f:stx $dc00 ;reset reg
  920. 1842 rmup tay:[175] #%0001:bne rmdn
  921. 1844  lda $d001           ;sprite0(y)
  922. 1846  cmp #48:beq rmlf
  923. 1848  dec $d001:bne rmlf
  924. 1850 rmdn tya:[175] #%0010:bne rmlf
  925. 1852  lda $d001           ;sprite0(y)
  926. 1854  cmp #247:beq rmlf
  927. 1856  inc $d001
  928. 1858 rmlf tya:[175] #%0100:bne rmrt
  929. 1860  ldx $d000           ;sprite0(x)
  930. 1862  lda $d010:[175] #1:bne [172][170]6
  931. 1864  cpx #22:beq rmxy
  932. 1866  dec $d000:cpx #0:bne rmxy
  933. 1868  lda $d010:[175] #$fe:sta $d010
  934. 1870  jmp rmxy
  935. 1872 rmrt tya:[175] #%1000:bne rmxy
  936. 1874  ldx $d000           ;sprite0(x)
  937. 1876  lda $d010:[175] #1:beq [172][170]6
  938. 1878  cpx #85:beq rmxy
  939. 1880  inc $d000:bne rmxy
  940. 1882  lda $d010:[176]a #$01:sta $d010
  941. 1884 rmxy [178] [172] ;put mouse [185]n (mx,my)
  942. 1886  lda $d000:sec:sbc #22:sta mx
  943. 1888  lda $d010:[175] #1:sbc #0:sta mx[170]1
  944. 1890  lda $d001:sec:sbc #48:sta my
  945. 1892  lda #199:sbc my:sta myi:rts
  946. 1894 ;
  947. 1896 rm[185]0y [178] [172] ;[185]iti[145] sprite0(y)
  948. 1898  lda tr:asl:asl:asl  ;within menu
  949. 1900  adc #52:sta $d001:rts  ;viewp[176]t
  950. 1902 ;
  951. 1904 rmsprt0 [178] [172] ;init sprite0
  952. 1906  lda $d001:cmp #48:bcs [172][170]26
  953. 1908  lda #75:sta $d000:sta $d001
  954. 1910  lda #[171]2:[175] $d010:sta $d010
  955. 1912  lda #[171]2:[175] $d01b:sta $d01b
  956. 1914  txa:bmi [172][170]7:[176]a $d015:bne [172][170]5
  957. 1916  [175] $d015:sta $d015:rts
  958. 1918 ;
  959. 1920 rmscol0 [178] [172] ;set sprite0 col[176]
  960. 1922  sta $d027:rts
  961. 1924 ;
  962. 1926 rmbtns [178] [172] ;[135] mouse but[164]ns
  963. 1928  lda #4:bit mb:bne rmbtn1
  964. 1930  asl:bit mb:bne rmbtn2
  965. 1932 rmbtn0 lda # 0:rts ; no  btn z[178]1
  966. 1934 rmbtn1 lda #[171]1:rts ;left btn z[178]0
  967. 1936 rmbtn2 lda # 1:rts ;rght btn z[178]0
  968. 1938 ;
  969. 1940 ;
  970. 1942 ;
  971. 1944 arrow [178] [172] ;sprite [131]
  972. 1946 .byt %00000000,%00000000,%00000000
  973. 1948 .byt %00000000,%00000000,%00000000
  974. 1950 .byt %00100000,%00000000,%00000000
  975. 1952 .byt %00110000,%00000000,%00000000
  976. 1954 .byt %00111000,%00000000,%00000000
  977. 1956 .byt %00111100,%00000000,%00000000
  978. 1958 .byt %00111110,%00000000,%00000000
  979. 1960 .byt %00111111,%00000000,%00000000
  980. 1962 .byt %00111100,%00000000,%00000000
  981. 1964 .byt %00100110,%00000000,%00000000
  982. 1966 .byt %00000110,%00000000,%00000000
  983. 1968 .byt %00000011,%00000000,%00000000
  984. 1970 .byt %00000011,%00000000,%00000000
  985. 1972 ;
  986. 1974 cross [178] [172] ;sprite [131]
  987. 1976 .byt %10001000,%00000000,%00000000
  988. 1978 .byt %01010000,%00000000,%00000000
  989. 1980 .byt %00100000,%00000000,%00000000
  990. 1982 .byt %01010000,%00000000,%00000000
  991. 1984 .byt %10001000,%00000000,%00000000
  992. 1986 ;
  993. 1988 ;
  994. 1990 ;code currently [128]s at $8bd6
  995. 1992 ;
  996. 1994 ;
  997. 1996 ;
  998. 1998 phase .[139] phase[171][172]:phase err[176]
  999. 2000 .[128]
  1000.